// 导入路由模块
const Router = require('koa-router');
const visitor = new Router();
const VisitorModel = require('../models/VisitorSchema');
// 访客登记信息
// 请求地址：http://localhost:3001/visitor/test
visitor.get('/test', async (ctx) => {
    // 通过ctx.body把数据响应给客户端
    console.log(ctx.request.query)
    ctx.body = `添加访客记录`
})
// 请求地址：http://localhost:3001/visitor/test
visitor.post('/test', async (ctx) => {
    // 通过ctx.body把数据响应给客户端
    console.log(ctx.request.body)
    ctx.body = `添加访客记录`
})


// 数据接口一： 登记访客信息
// 请求地址：/visitor/add
// 请求方式：post
// 提交的参数：  username, phone,icard,time,addr,content,numberplate,members,notes,supplement
// 响应格式： json格式
// 示例地址：http://localhost:3001/visitor/add

visitor.post('/add', async (ctx) => {
    // 通过ctx.body把数据响应给客户端
    // console.log(ctx.request.body)
    let { username, phone,icard,time,addr,content,numberplate,members,notes,supplement} = ctx.request.body;
    if(username && phone && icard && time&& addr && content){
        // 匹配手机号
        if(!/^1[3-9]\d{9}$/.test(phone)) {
            return  ctx.body = JSON.stringify({code: -1,msg: "手机号码格式不正确"})
        }
        // 匹配身份证号码
        if(!/[1-9]\d{5}(18|19|(\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[\dXx]$/.test(icard)) {
            return  ctx.body = JSON.stringify({code: -1,msg: "身份证号码格式不正确"})
        }
        // 调用Mongo
        await VisitorModel.create({
            username, 
            phone,
            icard,
            time,
            addr,
            content,
            numberplate,
            members,
            notes,
            supplement,
            passnum: 0
        })
        .then(content=> {
            // console.log(content)
            ctx.body = JSON.stringify({code: 200,msg: "访客信息登记成功"})
        })
        .catch(err=>{
            // console.log(err)
            ctx.body = JSON.stringify({code: 500,msg: "添加失败",err})
        })
    }
    else {
        // 响应报文：
        ctx.body = JSON.stringify({code: -1,msg: "缺少主要访客信息"})
    }
})


// 数据接口二： 获取访客信息列表
// 请求地址：/visitor/list
// 请求方式：get
// 提交的参数：  page ,pageSize
// 响应格式： json格式
// 示例地址：http://localhost:3001/visitor/list?page=1&pageSize=10
visitor.get('/list', async (ctx)=>{
    console.log( ctx.request.query )
    let {page ,pageSize} = ctx.request.query;
    if(typeof page == 'undefined' || typeof pageSize == 'undefined'){
        return  ctx.body = JSON.stringify({code: -1,msg: "缺少参数"})
    }
    else {
        //调用数据库API，设计异步编程。要配合async和await进行使用
        await VisitorModel.find().skip(page).limit(pageSize)
        .then(result => {
            return  ctx.body = JSON.stringify({code: 200,msg: "获取访客记录成功", result})
        })
        .catch(err=>{
            // console.log(err)
            ctx.body = JSON.stringify({code: 500,msg: "获取数据失败",err})
        })
    }
})


// 数据接口三： 修改访客审批状态
// 请求地址：/visitor/approve
// 请求方式：post
// 提交的参数：  passnum, id
// 响应格式： json格式
// 示例地址：http://localhost:3001/visitor/approve
visitor.post('/approve', async (ctx)=>{
    let { passnum , id } = ctx.request.body;
    if(typeof passnum == 'undefined' || typeof id == 'undefined') {
        ctx.body = JSON.stringify({code: -1,msg: "缺少参数"})
    }
    else {
        // 修改审批状态
        await VisitorModel.updateOne({_id: id}, {passnum: passnum})
        .then(result => {
            return  ctx.body = JSON.stringify({code: 200,msg: "设置审批状态成功", result})
        })
        .catch(err=>{
            // console.log(err)
            ctx.body = JSON.stringify({code: 500,msg: "修改失败",err})
        })
    }
})


// 数据接口四： 删除访客记录
// 请求地址：/visitor/remove
// 请求方式：post
// 提交的参数：  id
// 响应格式： json格式
// 示例地址：http://localhost:3001/visitor/remove
visitor.post('/remove', async (ctx)=>{
    let { id } = ctx.request.body;
    if(typeof id == 'undefined') {
        ctx.body = JSON.stringify({code: -1,msg: "缺少参数"})
    }
    else {
        // 删除数据表的记录
        await VisitorModel.findOneAndDelete({_id: id})
        .then(result => {
            return  ctx.body = JSON.stringify({code: 200,msg: "删除访客记录成功", result})
        })
        .catch(err=>{
            // console.log(err)
            ctx.body = JSON.stringify({code: 500,msg: "删除失败",err})
        })
    }
})

// 把访客路由挂在模块系统对象上
module.exports = visitor;